package leetcode.set;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.TreeSet;
/**
 * 
 * @Title: Solution349.java 
 * @Package leetcode.set 
 * @Description: 349. 两个数组的交集
 * @author CandyWall   
 * @date 2021年1月6日 下午10:39:19 
 * @version V1.0
 */
public class Solution349 {
    public int[] intersection(int[] nums1, int[] nums2) {
        TreeSet<Integer> set = new TreeSet();
        for(int num : nums1) {
            set.add(num);
        }
        ArrayList<Integer> sameElements = new ArrayList();
        
        for(int num2 : nums2) {
            // 集合遍历的过程中删除元素会报异常
            /*for(int num : set) {
                if(num2 == num) {
                    sameElements.add(num2);
                    set.remove(num2);
                }
            }*/
            // 1、采用迭代器的方式删除元素
            /*Iterator<Integer> iter = set.iterator();
            while(iter.hasNext()) {
                if(num2 == iter.next()) {
                    sameElements.add(num2);
                    iter.remove();
                }
            }*/
            // 2、使用Set集合的contains()方法，避免去遍历集合
            if(set.contains(num2)) {
                sameElements.add(num2);
                set.remove(num2);
            }
        }
        int[] nums3 = new int[sameElements.size()];
        for(int i = 0; i < nums3.length; i++) {
            nums3[i] = sameElements.get(i);
        }
        return nums3;
    }

    
    public static void main(String[] args) {
        int[] nums1 = {1, 2, 2, 1};
        int[] nums2 = {2, 2};
        int[] nums3 = new Solution349().intersection(nums1, nums2);
        System.out.println(Arrays.toString(nums3));
    }
}